let puppeteer = require('puppeteer'); // 引入puppeteer 具体参考npm:https://www.npmjs.com/package/puppeteer github:https://github.com/GoogleChrome/puppeteer#readme 中文:https://github.com/zhaoqize/puppeteer-api-zh_CN
let Film = require('../models/film'); // 引入film的Model
let {
  fetchResourcesToCdn
} = require('../qiniu'); // 引入封装好的上传七牛的方法
require('../libs/db.js')(); // 链接db

/**
 * 更新数据,把视频的地址和封面图的地址上传到七牛好回写到数据库
 * @param  {[type]}  obj [description]
 * @return {Promise}     [description]
 */
let updateDb = async (obj) => {
  // 根据抓取过来的豆瓣的封面图的地址上传到七牛
  let videoUrl = '';
  let coverurl = '';
  if (obj.videoUrl) {
    videoUrl = await fetchResourcesToCdn(obj.videoUrl);
  }
  if (obj.coverurl) {
    coverurl = await fetchResourcesToCdn(obj.coverurl);
  }
  // 更新
  await Film.updateOne({
    doubanId: obj.id
  }, {
    $set: {
      videoUrl: videoUrl,
      coverurl: coverurl
    }
  });
};

let getDetail = async () => {
  // 初始化一个borwser
  let browser = await puppeteer.launch({
    ignoreHTTPSErrors: true,
    devtools: false,
    headless: false,
    timeout: 10000
  });

  // 打开一个页面
  let page = await browser.newPage();

  // 查找上一次爬取好的电影的基础信息
  let films = await Film.find();
  for (let i = 0; i < films.length; i++) {
    if (!films[i].videoUrl) {
      let id = films[i].doubanId;
      // 根据豆瓣id拼接对应的url
      let url = `https://movie.douban.com/subject/${id}`;
      // 进入对应的页面
      await page.goto(url);
      // 等待2s 让浏览器加载页面
      await page.waitFor(2000);

      // js脚本抓取数据
      let obj = await page.evaluate(() => {
        var $ = window.$;
        var video = '';
        var coverurl = '';
        var cover = '';
        video = $('.label-trailer a').attr('href'); // 获取视频对应的url
        cover = $('.label-trailer a').css('background'); // 获取封面图
        if (cover) {
          var start = cover.indexOf('("'); // 截取出封面图的url
          var end = cover.lastIndexOf('")');
          coverurl = cover.substring(start + 2, end);
          if (coverurl && coverurl.indexOf('?') > -1) {
            var num = coverurl.indexOf('?');
            coverurl = coverurl.substring(0, num);
          }
        }
        return {
          video,
          coverurl
        };
      });
      // 如果有预告片地址
      if (obj.video) {
        await page.goto(obj.video); // 去预告片的页面

        // js脚本
        let videoUrl = await page.evaluate(() => {
          var $ = window.$;
          var videoUrl = '';
          videoUrl = $('video source').attr('src'); // 获取预告片的地址
          return videoUrl;
        });

        // 如果预告片的地址存在
        if (videoUrl) {
          obj.videoUrl = videoUrl; // 把预告片的url加到obj上
          delete obj.video; // 删除预告片所在页面的地址(这个没用了,也可以不管它)
        }
      }
      obj.id = id; // 把豆瓣id 添加到obj上

      // 更新数据库
      await updateDb(obj);
    };
  }
  // 关闭浏览器
  await browser.close();
  process.exit();
};

getDetail();
